home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 February: Tool Chest / Apple Developer CD Series Tool Chest February 1996 (Apple Computer)(1996).iso / Tool Chest / Interfaces & Libraries / Interfaces / PInterfaces / MoviesFormat.p < prev    next >
Encoding:
Text File  |  1995-07-06  |  13.8 KB  |  509 lines  |  [TEXT/MPS ]

  1. {
  2.      File:        MoviesFormat.p
  3.  
  4.      Contains:    QuickTime Interfaces.
  5.  
  6.      Version:    Technology:    QuickTime 2.0
  7.                  Package:    Universal Interfaces 2.1 in “MPW Latest” on ETO #18
  8.  
  9.      Copyright:    © 1984-1995 by Apple Computer, Inc.
  10.                  All rights reserved.
  11.  
  12.      Bugs?:        If you find a problem with this file, use the Apple Bug Reporter
  13.                  stack.  Include the file and version information (from above)
  14.                  in the problem description and send to:
  15.                      Internet:    apple.bugs@applelink.apple.com
  16.                      AppleLink:    APPLE.BUGS
  17.  
  18. }
  19.  
  20. {$IFC UNDEFINED UsingIncludes}
  21. {$SETC UsingIncludes := 0}
  22. {$ENDC}
  23.  
  24. {$IFC NOT UsingIncludes}
  25.  UNIT MoviesFormat;
  26.  INTERFACE
  27. {$ENDC}
  28.  
  29. {$IFC UNDEFINED __MOVIESFORMAT__}
  30. {$SETC __MOVIESFORMAT__ := 1}
  31.  
  32. {$I+}
  33. {$SETC MoviesFormatIncludes := UsingIncludes}
  34. {$SETC UsingIncludes := 1}
  35.  
  36.  
  37. {$IFC UNDEFINED __TYPES__}
  38. {$I Types.p}
  39. {$ENDC}
  40. {    ConditionalMacros.p                                            }
  41.  
  42. {$IFC UNDEFINED __WINDOWS__}
  43. {$I Windows.p}
  44. {$ENDC}
  45. {    Memory.p                                                    }
  46. {        MixedMode.p                                                }
  47. {    Quickdraw.p                                                    }
  48. {        QuickdrawText.p                                            }
  49. {    Events.p                                                    }
  50. {        OSUtils.p                                                }
  51. {    Controls.p                                                    }
  52. {        Menus.p                                                    }
  53.  
  54. {$IFC UNDEFINED __IMAGECOMPRESSION__}
  55. {$I ImageCompression.p}
  56. {$ENDC}
  57. {    QDOffscreen.p                                                }
  58. {        Errors.p                                                }
  59. {    Components.p                                                }
  60. {    StandardFile.p                                                }
  61. {        Dialogs.p                                                }
  62. {            TextEdit.p                                            }
  63. {        Files.p                                                    }
  64. {            Finder.p                                            }
  65.  
  66. {$IFC UNDEFINED __MOVIES__}
  67. {$I Movies.p}
  68. {$ENDC}
  69. {    Aliases.p                                                    }
  70. {        AppleTalk.p                                                }
  71.  
  72. {$PUSH}
  73. {$ALIGN MAC68K}
  74. {$LibExport+}
  75.  
  76. CONST
  77.     kMovieVersion                = 0;                            { version number of the format here described }
  78.  
  79.  
  80. TYPE
  81.     MoviesUserData = RECORD
  82.         size:                    LONGINT;                                { size of this user data }
  83.         udType:                    LONGINT;                                { type of user data }
  84.         data:                    PACKED ARRAY [0..0] OF CHAR;            { the user data }
  85.     END;
  86.  
  87.     UserDataAtom = RECORD
  88.         size:                    LONGINT;
  89.         atomType:                LONGINT;
  90.         userData:                ARRAY [0..0] OF MoviesUserData;
  91.     END;
  92.  
  93. { MoviesDataDescription tells us where the data for the movie or track lives.
  94.    The data can follow the directory, be in the datafork of the same file as the directory resource,
  95.    be in the resource fork of the same file as the directory resource, be in another file in the
  96.    data fork or resource fork, or require a specific bottleneck to fetch the data. }
  97. {***************************************
  98. *
  99. *   MediaDirectory information -
  100. *        The MediaDirectory is tightly coupled to the data.
  101. *
  102. ***************************************}
  103.     SampleDescriptionAtom = RECORD
  104.         size:                    LONGINT;
  105.         atomType:                LONGINT;                                { = 'stsd' }
  106.         flags:                    LONGINT;                                { 1 byte of version / 3 bytes of flags }
  107.         numEntries:                LONGINT;
  108.         sampleDescTable:        ARRAY [0..0] OF SampleDescription;
  109.     END;
  110.  
  111. { TimeToSampleNum maps physical sample time to physical sample number. }
  112.     TimeToSampleNum = RECORD
  113.         sampleCount:            LONGINT;
  114.         sampleDuration:            TimeValue;
  115.     END;
  116.  
  117.     TimeToSampleNumAtom = RECORD
  118.         size:                    LONGINT;
  119.         atomType:                LONGINT;                                { = 'stts' }
  120.         flags:                    LONGINT;                                { 1 byte of version / 3 bytes of flags }
  121.         numEntries:                LONGINT;
  122.         timeToSampleNumTable:    ARRAY [0..0] OF TimeToSampleNum;
  123.     END;
  124.  
  125. { SyncSamples is a list of the physical samples which are self contained. }
  126.     SyncSampleAtom = RECORD
  127.         size:                    LONGINT;
  128.         atomType:                LONGINT;                                { = 'stss' }
  129.         flags:                    LONGINT;                                { 1 byte of version / 3 bytes of flags }
  130.         numEntries:                LONGINT;
  131.         syncSampleTable:        ARRAY [0..0] OF LONGINT;
  132.     END;
  133.  
  134. { SampleToChunk maps physical sample number to chunk number. }
  135. { same as SampleToChunk, but redundant first sample is removed }
  136.     SampleToChunk = RECORD
  137.         firstChunk:                LONGINT;
  138.         samplesPerChunk:        LONGINT;
  139.         sampleDescriptionID:    LONGINT;
  140.     END;
  141.  
  142.     SampleToChunkAtom = RECORD
  143.         size:                    LONGINT;
  144.         atomType:                LONGINT;                                { = 'stsc' }
  145.         flags:                    LONGINT;                                { 1 byte of version / 3 bytes of flags }
  146.         numEntries:                LONGINT;
  147.         sampleToChunkTable:        ARRAY [0..0] OF SampleToChunk;
  148.     END;
  149.  
  150.     ChunkOffsetAtom = RECORD
  151.         size:                    LONGINT;
  152.         atomType:                LONGINT;                                { = 'stco' }
  153.         flags:                    LONGINT;                                { 1 byte of version / 3 bytes of flags }
  154.         numEntries:                LONGINT;
  155.         chunkOffsetTable:        ARRAY [0..0] OF LONGINT;
  156.     END;
  157.  
  158.     SampleSizeAtom = RECORD
  159.         size:                    LONGINT;
  160.         atomType:                LONGINT;                                { = 'stsz' }
  161.         flags:                    LONGINT;                                { 1 byte of version / 3 bytes of flags }
  162.         sampleSize:                LONGINT;
  163.         numEntries:                LONGINT;
  164.         sampleSizeTable:        ARRAY [0..0] OF LONGINT;
  165.     END;
  166.  
  167.     ShadowSync = RECORD
  168.         fdSampleNum:            LONGINT;
  169.         syncSampleNum:            LONGINT;
  170.     END;
  171.  
  172.     ShadowSyncAtom = RECORD
  173.         size:                    LONGINT;
  174.         atomType:                LONGINT;                                { = 'stsz' }
  175.         flags:                    LONGINT;                                { 1 byte of version / 3 bytes of flags }
  176.         numEntries:                LONGINT;
  177.         shadowSyncTable:        ARRAY [0..0] OF ShadowSync;
  178.     END;
  179.  
  180.     SampleTableAtom = RECORD
  181.         size:                    LONGINT;
  182.         atomType:                LONGINT;                                { = 'stbl' }
  183.         sampleDescription:        SampleDescriptionAtom;
  184.         timeToSampleNum:        TimeToSampleNumAtom;
  185.         sampleToChunk:            SampleToChunkAtom;
  186.         syncSample:                SyncSampleAtom;
  187.         sampleSize:                SampleSizeAtom;
  188.         chunkOffset:            ChunkOffsetAtom;
  189.         shadowSync:                ShadowSyncAtom;
  190.     END;
  191.  
  192.     PublicHandlerInfo = RECORD
  193.         flags:                    LONGINT;                                { 1 byte of version / 3 bytes of flags }
  194.         componentType:            LONGINT;
  195.         componentSubType:        LONGINT;
  196.         componentManufacturer:    LONGINT;
  197.         componentFlags:            LONGINT;
  198.         componentFlagsMask:        LONGINT;
  199.         componentName:            PACKED ARRAY [0..0] OF CHAR;
  200.     END;
  201.  
  202.     HandlerAtom = RECORD
  203.         size:                    LONGINT;
  204.         atomType:                LONGINT;                                { = 'hdlr' }
  205.         hInfo:                    PublicHandlerInfo;
  206.     END;
  207.  
  208. { a data reference is a private structure }
  209.     DataRefAtom = LONGINT;
  210.  
  211.     DataInfoAtom = RECORD
  212.         size:                    LONGINT;
  213.         atomType:                LONGINT;                                { = 'dinf' }
  214.         dataRef:                DataRefAtom;
  215.     END;
  216.  
  217.     RgnAtom = RECORD
  218.         size:                    LONGINT;
  219.         atomType:                LONGINT;
  220.         rgnSize:                INTEGER;
  221.         rgnBBox:                Rect;
  222.         data:                    PACKED ARRAY [0..0] OF CHAR;
  223.     END;
  224.  
  225.     MatteCompressedAtom = RECORD
  226.         size:                    LONGINT;
  227.         atomType:                LONGINT;
  228.         flags:                    LONGINT;                                { 1 byte of version / 3 bytes of flags }
  229.         matteImageDescription:    ImageDescription;
  230.         matteData:                PACKED ARRAY [0..0] OF CHAR;
  231.     END;
  232.  
  233.     MatteAtom = RECORD
  234.         size:                    LONGINT;
  235.         atomType:                LONGINT;
  236.         aCompressedMatte:        MatteCompressedAtom;
  237.     END;
  238.  
  239.     ClippingAtom = RECORD
  240.         size:                    LONGINT;
  241.         atomType:                LONGINT;
  242.         aRgnClip:                RgnAtom;
  243.     END;
  244.  
  245. {**********************
  246. * Media Info Example Structures
  247. **********************}
  248.     VideoMediaInfoHeader = RECORD
  249.         flags:                    LONGINT;                                { 1 byte of version / 3 bytes of flags }
  250.         graphicsMode:            INTEGER;                                { for QD - transfer mode }
  251.         opColorRed:                INTEGER;                                { opcolor for transfer mode }
  252.         opColorGreen:            INTEGER;
  253.         opColorBlue:            INTEGER;
  254.     END;
  255.  
  256.     VideoMediaInfoHeaderAtom = RECORD
  257.         size:                    LONGINT;                                { size of Media info }
  258.         atomType:                LONGINT;                                { = 'vmhd' }
  259.         vmiHeader:                VideoMediaInfoHeader;
  260.     END;
  261.  
  262.     VideoMediaInfo = RECORD
  263.         size:                    LONGINT;                                { size of Media info }
  264.         atomType:                LONGINT;                                { = 'minf' }
  265.         header:                    VideoMediaInfoHeaderAtom;
  266.         dataHandler:            HandlerAtom;
  267.         dataInfo:                DataInfoAtom;
  268.         sampleTable:            SampleTableAtom;
  269.     END;
  270.  
  271.     SoundMediaInfoHeader = RECORD
  272.         flags:                    LONGINT;                                { 1 byte of version / 3 bytes of flags }
  273.         balance:                INTEGER;
  274.         rsrvd:                    INTEGER;
  275.     END;
  276.  
  277.     SoundMediaInfoHeaderAtom = RECORD
  278.         size:                    LONGINT;                                { size of Media info }
  279.         atomType:                LONGINT;                                { = 'vmhd' }
  280.         smiHeader:                SoundMediaInfoHeader;
  281.     END;
  282.  
  283.     SoundMediaInfo = RECORD
  284.         size:                    LONGINT;                                { size of Media info }
  285.         atomType:                LONGINT;                                { = 'minf' }
  286.         header:                    SoundMediaInfoHeaderAtom;
  287.         dataHandler:            HandlerAtom;
  288.         dataReference:            DataRefAtom;
  289.         sampleTable:            SampleTableAtom;
  290.     END;
  291.  
  292. { whatever data the media handler needs goes after the atomType }
  293.     MediaInfo = RECORD
  294.         size:                    LONGINT;
  295.         atomType:                LONGINT;
  296.     END;
  297.  
  298. {**********************
  299. * Media Directory Structures
  300. **********************}
  301.     MediaHeader = RECORD
  302.         flags:                    LONGINT;                                { 1 byte of version / 3 bytes of flags }
  303.         creationTime:            LONGINT;                                { seconds since Jan 1904 when directory was created }
  304.         modificationTime:        LONGINT;                                { seconds since Jan 1904 when directory was appended }
  305.         timeScale:                TimeValue;                                { start time for Media (Media time) }
  306.         duration:                TimeValue;                                { length of Media (Media time) }
  307.         language:                INTEGER;
  308.         quality:                INTEGER;
  309.     END;
  310.  
  311.     MediaHeaderAtom = RECORD
  312.         size:                    LONGINT;
  313.         atomType:                LONGINT;
  314.         header:                    MediaHeader;
  315.     END;
  316.  
  317.     MediaDirectory = RECORD
  318.         size:                    LONGINT;
  319.         atomType:                LONGINT;                                { = 'mdia' }
  320.         mediaHeader:            MediaHeaderAtom;                        { standard Media information }
  321.         mediaHandler:            HandlerAtom;
  322.         mediaInfo:                MediaInfo;
  323.     END;
  324.  
  325. {**********************
  326. * Track Structures
  327. **********************}
  328.  
  329. CONST
  330.     TrackEnable                    = 1 * (2**(0));
  331.     TrackInMovie                = 1 * (2**(1));
  332.     TrackInPreview                = 1 * (2**(2));
  333.     TrackInPoster                = 1 * (2**(3));
  334.  
  335.  
  336. TYPE
  337.     TrackHeader = RECORD
  338.         flags:                    LONGINT;                                { 1 byte of version / 3 bytes of flags }
  339.         creationTime:            LONGINT;                                { seconds since Jan 1904 when directory was created }
  340.         modificationTime:        LONGINT;                                { seconds since Jan 1904 when directory was appended }
  341.         trackID:                LONGINT;
  342.         reserved1:                LONGINT;
  343.         duration:                TimeValue;                                { length of track (track time) }
  344.         reserved2:                LONGINT;
  345.         reserved3:                LONGINT;
  346.         layer:                    INTEGER;
  347.         alternateGroup:            INTEGER;
  348.         volume:                    INTEGER;
  349.         reserved4:                INTEGER;
  350.         matrix:                    MatrixRecord;
  351.         trackWidth:                Fixed;
  352.         trackHeight:            Fixed;
  353.     END;
  354.  
  355.     TrackHeaderAtom = RECORD
  356.         size:                    LONGINT;                                { size of track header }
  357.         atomType:                LONGINT;                                { = 'tkhd' }
  358.         header:                    TrackHeader;
  359.     END;
  360.  
  361.     EditListType = RECORD
  362.         trackDuration:            TimeValue;
  363.         mediaTime:                TimeValue;
  364.         mediaRate:                Fixed;
  365.     END;
  366.  
  367.     EditListAtom = RECORD
  368.         size:                    LONGINT;
  369.         atomType:                LONGINT;                                { = elst }
  370.         flags:                    LONGINT;                                { 1 byte of version / 3 bytes of flags }
  371.         numEntries:                LONGINT;
  372.         editListTable:            ARRAY [0..0] OF EditListType;
  373.     END;
  374.  
  375.     EditsAtom = RECORD
  376.         size:                    LONGINT;
  377.         atomType:                LONGINT;                                { = edts }
  378.         editList:                EditListAtom;
  379.     END;
  380.  
  381.     TrackLoadSettings = RECORD
  382.         preloadStartTime:        TimeValue;
  383.         preloadDuration:        TimeValue;
  384.         preloadFlags:            LONGINT;
  385.         defaultHints:            LONGINT;
  386.     END;
  387.  
  388.     TrackLoadSettingsAtom = RECORD
  389.         size:                    LONGINT;
  390.         atomType:                LONGINT;                                { = load }
  391.         settings:                TrackLoadSettings;
  392.     END;
  393.  
  394.     TrackDirectory = RECORD
  395.         size:                    LONGINT;
  396.         atomType:                LONGINT;                                { = 'trak' }
  397.         trackHeader:            TrackHeaderAtom;                        { standard track information }
  398.         trackClip:                ClippingAtom;
  399.         edits:                    EditsAtom;
  400.         media:                    MediaDirectory;
  401.         userData:                UserDataAtom;                            { space for extending with new data types }
  402.     END;
  403.  
  404. {***************************************
  405. *
  406. *   MovieDirectory -
  407. *        The MovieDirectory is the top level structure which
  408. *        holds the TrackInstance describing where the
  409. *        TrackDirectories are.
  410. *
  411. ***************************************}
  412.     MovieHeader = RECORD
  413.         flags:                    LONGINT;                                { 1 byte of version / 3 bytes of flags }
  414.         creationTime:            LONGINT;                                { seconds since Jan 1904 when directory was created }
  415.         modificationTime:        LONGINT;                                { seconds since Jan 1904 when directory was appended }
  416.         timeScale:                TimeValue;                                { Time specifications }
  417.         duration:                TimeValue;
  418.         preferredRate:            Fixed;                                    { rate at which to play this movie }
  419.         preferredVolume:        INTEGER;                                { volume to play movie at }
  420.         reserved1:                INTEGER;
  421.         preferredLong1:            LONGINT;
  422.         preferredLong2:            LONGINT;
  423.         matrix:                    MatrixRecord;
  424.         previewTime:            TimeValue;                                { time in track the proxy begins (track time) }
  425.         previewDuration:        TimeValue;                                { how long the proxy lasts (track time) }
  426.         posterTime:                TimeValue;                                { time in track the proxy begins (track time) }
  427.         selectionTime:            TimeValue;                                { time in track the proxy begins (track time) }
  428.         selectionDuration:        TimeValue;                                { time in track the proxy begins (track time) }
  429.         currentTime:            TimeValue;                                { time in track the proxy begins (track time) }
  430.         nextTrackID:            LONGINT;                                { next value to use for a TrackID }
  431.     END;
  432.  
  433.     MovieHeaderAtom = RECORD
  434.         size:                    LONGINT;
  435.         atomType:                LONGINT;                                { = 'mvhd' }
  436.         header:                    MovieHeader;
  437.     END;
  438.  
  439.     MovieDirectory = RECORD
  440.         size:                    LONGINT;
  441.         atomType:                LONGINT;                                { = 'moov' }
  442.         header:                    MovieHeaderAtom;
  443.         movieClip:                ClippingAtom;
  444.         { Track Directories }
  445.         track:            RECORD
  446.                 trackDirectory:                    TrackDirectory;                    { Track directory information }
  447.             END;
  448.  
  449.  
  450.         { User data for Movie }
  451.         userData:                UserDataAtom;                            { space for user extensions }
  452.     END;
  453.  
  454.  
  455. CONST
  456. { some system defined format IDs }
  457.     MOVIE_TYPE                    = 'moov';
  458.     TRACK_TYPE                    = 'trak';
  459.     MEDIA_TYPE                    = 'mdia';
  460.     VIDEO_TYPE                    = 'vide';
  461.     SOUND_TYPE                    = 'soun';
  462.  
  463. { atom id's }
  464.     MovieAID                    = 'moov';
  465.     MovieHeaderAID                = 'mvhd';
  466.     ClipAID                        = 'clip';
  467.     RgnClipAID                    = 'crgn';
  468.     MatteAID                    = 'matt';
  469.     MatteCompAID                = 'kmat';
  470.     TrackAID                    = 'trak';
  471.     UserDataAID                    = 'udta';
  472.     TrackHeaderAID                = 'tkhd';
  473.     EditsAID                    = 'edts';
  474.     EditListAID                    = 'elst';
  475.     MediaAID                    = 'mdia';
  476.     MediaHeaderAID                = 'mdhd';
  477.     MediaInfoAID                = 'minf';
  478.     VideoMediaInfoHeaderAID        = 'vmhd';
  479.     SoundMediaInfoHeaderAID        = 'smhd';
  480.     GenericMediaInfoHeaderAID    = 'gmhd';
  481.     GenericMediaInfoAID            = 'gmin';
  482.     DataInfoAID                    = 'dinf';
  483.     DataRefAID                    = 'dref';
  484.     SampleTableAID                = 'stbl';
  485.     STSampleDescAID                = 'stsd';
  486.     STTimeToSampAID                = 'stts';
  487.     STSyncSampleAID                = 'stss';
  488.     STSampleToChunkAID            = 'stsc';
  489.     STShadowSyncAID                = 'stsh';
  490.     HandlerAID                    = 'hdlr';
  491.     STSampleSizeAID                = 'stsz';
  492.     STChunkOffsetAID            = 'stco';
  493.     DataRefContainerAID            = 'drfc';
  494.     TrackReferenceAID            = 'tref';
  495.     ColorTableAID                = 'ctab';
  496.     LoadSettingsAID                = 'load';
  497.  
  498.  
  499. {$ALIGN RESET}
  500. {$POP}
  501.  
  502. {$SETC UsingIncludes := MoviesFormatIncludes}
  503.  
  504. {$ENDC} {__MOVIESFORMAT__}
  505.  
  506. {$IFC NOT UsingIncludes}
  507.  END.
  508. {$ENDC}
  509.